package core

import (
	"fmt"
	"net/http"
	"os"
	"os/user"
)

var (
	localpath string
)

func init() {
	// 获取本地存储根目录地址
	u, err := user.Current()
	if err != nil {
		panic(err)
	}
	localpath = u.HomeDir + "/htmlcopy/"

	// 检查目录是否存在
	info, err := os.Stat(localpath)
	var temp bool
	if err != nil {
		temp = os.IsExist(err)
	} else {
		temp = info.IsDir()
	}

	// 如果目录不存在则建立该目录
	if !temp {
		err := os.MkdirAll(localpath, os.ModePerm)
		if err != nil {
			panic("create rootpath error, please use the administrator to run\n\t" + err.Error())
		}
	}
}

// 实现Saveer, RespDoc接口
type Local struct {
}

func NewLocal() *Local {
	return &Local{}
}

// 实现Saveer接口
// 本方法实现将body存储到本地localpath目录
func (c *Local) SaveFile(url, key string, body []byte) error {

	err := saveByteToFile(body, localpath+key)
	if err != nil {
		return err
	}

	return nil
}

// 实现Saveer接口
// 返回文件存储的根目录
func (c *Local) SaveRoot() string {
	return localpath
}

// 实现RespDoc接口
func (c *Local) GetResponse(url string, client *http.Client) (*http.Response, error) {
	return client.Get(url)
}

// 实现Logger接口
func (c *Local) Write(b []byte) (int, error) {
	fmt.Println(string(b))
	return len(b), nil
}
